iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0

目前雙欄式佈局仍然是網頁常見的佈局之一,其他還有像是單欄式、三欄式。這個概念在很早之前就有了,屬於設計領域,不過隨著技術的演變,實做也有些不同,比如之前提到的articleheaderfooteraside等等就是在語義上有意義的標籤。header、body、footer也就是從縱面來看,分成頭部、身體和腳部,不只是在網頁主體上(Document),表格(table)有th、tr之分,Bootstrap的CSS框架中也有不少小物件可拆分成這三個部分。

從橫軸面來看,最簡單的是單欄是佈局,也就只有一個主體,手幾等螢幕較小的裝置也可以顯示。多含有邊框訊息(aside)的訊息的雙欄式佈局,是我目前個人最常見到的,於電腦等較大型顯示裝置下的佈局方式。此外,還有三欄、多欄式佈局,在這以外的佈局方式也有不少。舉幾個例子:知名內容管理軟體(CMS)WordPress的預設初始佈局(主題),當前應該是雙欄是佈局;另一個值名項目管理工具Trello,就有點多欄式的感覺;Google Keep的佈局方式比較特別(之前介紹的Metro中的範例也是)。

flexbox和grid是CSS中較年輕的新成員,借由CSS的幫助,可以實際實現HTML裡的佈局。還記得我提過的CSS reference嗎?借個裏面介紹的CSS-Grid的圖來說說:
https://ithelp.ithome.com.tw/upload/images/20181108/20112470t0yIvnZ9gn.png

可以看到header、footer和aside在雙欄式佈局裡的位置,當然這不是唯一,雙欄式佈局只是一種概念。


透過Bootstrap實現

Bootstrap以另一種抽象化的方式,包含了containerrowcol等等來調整佈局,框架最大好處就是幫忙實現一些而外的細節,壞處就是需要多學一點,不過CSS Grid很新,推薦更去學學Boostrap。今天不多說Bootstrap,來直接做簡單有點醜陋的範例。

首先先引入Bootstap:

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>

順面引入一個而外準備的CSS檔案:

    <link href="mycss.css" rel="stylesheet"/>

建立container、header和footer,其中不同高度的以row區隔,container屬性更大可直接放進body標籤(看實際怎麼設計):

    <div class="container">
      <header class="row">
      </header>
      <div class="row">
                   <section class="col-9">
                     <article>The</article>
                   </section>
                   <aside class="col-2"></aside>
      </div>
      <footer class="row">footer</footer>
    </div>

爲header加一點內容:

        <nav class="row">
          <div class="col">item1#</div>
          <div class="col">item2#</div>
          <div class="col">item3#</div>
          <div class="col">item4#</div>
          <div class="col">item5#</div>
        </nav>

body和其他內容也可以加一點col的分隔區塊,完整的網頁內容會是:

<!doctype html>
<html>
  <head>
    <meta charset="UTF-8"/>
    <title>Example 2 Cols Page</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
    <link href="mycss.css" rel="stylesheet"/>
  </head>
  <body>
    <div class="container">
      <header class="row">
        <nav class="row">
          <div class="col">item1#</div>
          <div class="col">item2#</div>
          <div class="col">item3#</div>
          <div class="col">item4#</div>
          <div class="col">item5#</div>
        </nav>
      </header>
      <div class="row">
        <section class="col-9">
          <article>The</article>
          <article>Main</article>
          <article>Article</article>
        </section>
        <aside class="col-2">
          <div>
            Hello
          </div>
          <div>
            World
          </div>
        </aside>
      </div>
      <footer class="row">footer</footer>
    </div>
  </body>
</html>

爲了更好的區分區塊,來寫一點CSS,把每個區塊上色、擴大:

header,footer{
    background-color: black;
    color: white;
    height: 7eM;
}

section{
    background-color: yellow;
    color: blue;
}

section article{
    height: 10eM;
    border: sold 1px black;
}

aside{
    background-color: green;
}

aside div{
    height: 5eM;
    background-color: green;
    color: yellow;
}

簡單來看一下成品吧!
https://ithelp.ithome.com.tw/upload/images/20181108/20112470sJnyhTQZYA.png

恩,雖然有點難看,但還算不錯。配合上bootstrap的小物件與實際內容,應該能弄出不錯的東西。

雙欄式只是一種大方向的設計概念,開發大可以先從單欄式開始,專注於重要的部分,再補上一些而外的需求。


上一篇
今天閒聊JS裡的物件
下一篇
從Webcam.js來說說Flash
系列文
從零開始遲來的Web開發筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言